package main

import (
	"errors"

	"github.com/ssbcV2/contract"
)

var Buyer map[string]int
var Seller string  // 卖家
var Ended bool     // 结束标记
var Price int      //定价
var content string //虚拟物品内容

func init() {
	Buyer = map[string]int{}
	Seller = contract.Caller()
	Price = 100
	content = ""
	Ended = false
}

func SetContent(args map[string]interface{}) (interface{}, error) {
	if contract.Caller() != Seller {
		contract.Info("只有合约发布人能修改")
		return nil, errors.New("只有合约发布人能修改")
	}

	if content != "" {
		contract.Info("最多只能修改一次")
		return nil, errors.New("最多只能修改一次")
	}

	neirong, ok := args["neirong"].(string)

	if !ok {
		return nil, errors.New("缺少neirong参数")
	}

	content = neirong

	return nil, nil

}

func Buy(args map[string]interface{}) (interface{}, error) {
	if Ended {
		_ = contract.Transfer(contract.Caller(), contract.Value()) // 退回转账
		contract.Info("销售已结束")
		return nil, errors.New("销售已结束")
	}

	if Buyer[contract.Caller()] == Price {
		contract.Transfer(contract.Caller(), contract.Value()) // 退回转账
		contract.Info("无需重复购买")
		return nil, errors.New("无需重复购买")
	}

	if contract.Value() < Price {
		contract.Transfer(contract.Caller(), contract.Value()) // 退回转账
		contract.Info("请转账足够数额")
		return nil, errors.New("请转账足够数额")
	}

	if contract.Value() > Price {
		contract.Transfer(contract.Caller(), contract.Value()-Price) // 退回转账
		Buyer[contract.Caller()] = Price
		contract.Info("购买成功，已经为您找零")
		return nil, errors.New("请转账足够数额")
	}

	contract.Info("购买成功")
	Buyer[contract.Caller()] = contract.Value()
	return nil, nil

}

func End(args map[string]interface{}) (interface{}, error) {
	_ = contract.Transfer(contract.Caller(), contract.Value()) // End方法不接受转账，退回
	if Seller != contract.Caller() {
		contract.Info("非合约发布者，无法结束销售")
		return nil, errors.New("非合约发布者，无法结束销售")
	}
	Ended = true
	return nil, nil
}

func Show(args map[string]interface{}) (interface{}, error) {
	_ = contract.Transfer(contract.Caller(), contract.Value()) // Show方法不接受转账，退回
	if Buyer[contract.Caller()] != Price {
		contract.Info("尚未购买")
		return nil, errors.New("尚未购买")
	}

	contract.Info(content)

	return nil, nil
}
